package cn.cailin.day07.demo12ReverseStream;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/*
    java.io.InputStreamReader extends Reader
    InputStreamReader:是字节流通向字符流的桥梁：它是指定的charset读取字节并将其解码为字符。（解码把看不懂的变成能看懂的）

    继承自父类的共性成员方法：
        int read()读取单个字符并返回。
        int read(char[] cbuf)一次读取多个字符，将字符读入数组
        void close()关闭该流并释放与之关联的所有资源

    构造方法:
        InputStreamReader(InputStream in)创建一个使用默认字符集的InputStreamReader
        InputStreamReader(InputStream in,String charsetName)创建使用指定字符集的InputStreamReader.
        参数:
            InputStream in:字节输入流，用来读取文件中保存的字节
            String charsetName:指定的编码表名称，不区分大小写可以使用utf-8/GBK不指定默认utf-8
    使用步骤:
        1.创建InputStreamReader对象，构造方法中传递字节输入流和指定的编码表名称
        2.使用InputStreamReader对象中的方法read读取文件
        3.释放资源
    注意事项
        构造方法中指定的编码表名称要和文件的编码相同否则会发生乱码
 */
public class Demo03InputStreamReader {
    public static void main(String[] args) throws IOException {
        read_utf_8();
        read_GBK();

    }

    private static void read_GBK() throws IOException {

            //1.创建InputStreamReader对象，构造方法中传递字节输入流和指定的编码表名称、
            InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\IDEA\\day05-code\\src\\cn\\cailin\\day07\\gbk.txt"),"utf-8");//默认指定u8
            //2.使用InputStreamReader对象中的方法read读取文件
            int len=0;
            while ((len=isr.read())!=-1){
                System.out.println((char) len);
            }
            //3.释放资源
            isr.close();
        }

    /*
        使用InputStreamReader读取UTF-8格式文件
     */
    private static void read_utf_8() throws IOException {
        //1.创建InputStreamReader对象，构造方法中传递字节输入流和指定的编码表名称、
        InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\IDEA\\day05-code\\src\\cn\\cailin\\day07\\utf-8.txt"),"UTF-8");//默认指定u8
        //2.使用InputStreamReader对象中的方法read读取文件
        int len=0;
        while ((len=isr.read())!=-1){
            System.out.println((char) len);
        }
        //3.释放资源
        isr.close();
    }
}
